/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package logica;

import java.util.concurrent.Semaphore;
import javax.swing.JLabel;

/**
 *
 * @author Jorge Maldonado
 */
public class persona extends JLabel implements Runnable {

    private double tiempoServicio;
    private double tiempoSistema;
    private boolean vivo;
    private Thread hilo;
    private Semaphore sem;
    public Semaphore sem2;
    

    public persona() {
        //super();
        setBounds(0, 50, 50, 40);
        setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/clientes/carretadepaiz.png")));
        tiempoSistema = 0;
        tiempoServicio = 0;
        vivo = true;
        sem = new Semaphore(0, true);
        sem2 = new Semaphore(0, true);
        hilo = new Thread(this);
        general.hilos.add(hilo);
        System.out.println("pasa1");
        Thread entra = new Thread(new Runnable() {

            public void run() {
                try {
                    entra_cliente();
                } catch (Exception ev) {
                }
            }
        });
        // hilo.start();
       entra.start();
        hilo.start();
        Thread terminar = new Thread(new Runnable() {

            public void run() {
                try {
                    //  interfaz.graficos.jTextArea2.setText(interfaz.graficos.jTextArea2.getText()+"entra\n");
                    // System.out.println("entra");
                    
                  //   entra_cliente();
                    interfaz.Principal.incCola();
                    
                    sem.acquire();
                   // sale_cola();
                    //    interfaz.graficos.jTextArea2.setText(interfaz.graficos.jTextArea2.getText()+"sale\n");
                    //  System.out.println("sale");
                    interfaz.Principal.slCola();
                    vivo = false;
                } catch (Exception ev) {
                }
            }
        });
        general.hilos.add(terminar);
        terminar.start();
    }

    public void run() {
        try {
            while (vivo) {
                /*Solo contara cuanto tiempo estuvo el cliente en el sistema*/
                tiempoSistema++;
                Thread.sleep(general.velocidad);    
                while(logica.general.pausa){
                    Thread.sleep(100);
                }
            }
            sale_cliente();
        } catch (Exception ev) {
        }
    }

    public void terminar() {
        sem.release();
    }

    /**
     * @return the tiempoServicio
     */
    public double getTiempoServicio() {
        return tiempoServicio;
    }

    /**
     * @param tiempoServicio the tiempoServicio to set
     */
    public void setTiempoServicio(double tiempoServicio) {
        this.tiempoServicio = tiempoServicio;
    }

    /**
     * @return the tiempoSistema
     */
    public double getTiempoSistema() {
        return tiempoSistema;
    }

    private void entra_cliente() throws Exception {
        int x = 0;
        setBounds(x, 10, 50, 40);
        while (x <= 123) {
            x += 10;
            setBounds(x, 10, 50, 40);
            Thread.sleep(30);
            while(logica.general.pausa){
                    Thread.sleep(100);
                }

        }
        

        setBounds(700, 2000, 50, 40);
        sem2.release();
    }

    private void sale_cliente() throws Exception {
        int x = 0;
        setBounds(x, 10, 50, 40);
        while (x <= 123) {
            x += 10;
            setBounds(x, 10, 50, 40);
            Thread.sleep(30);
            while(logica.general.pausa){
                    Thread.sleep(100);
                }

        }
        
        interfaz.Principal.count_sale();


        setBounds(700, 2000, 50, 40);
        sem2.release();
    }
    public void sale_cola() throws Exception {
        int x = 0;
        setBounds(0, x, 50, 40);
        while (x <= 80) {
            x += 10;
            setBounds(0, x, 50, 40);
            Thread.sleep(60);
            while(logica.general.pausa){
                    Thread.sleep(100);
                }
        }
        setBounds(700, 2000, 50, 40);
        sem2.release();
    }
}
